1   /*
2    * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved.
3    * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4    *
5    * This code is free software; you can redistribute it and/or modify it
6    * under the terms of the GNU General Public License version 2 only, as
7    * published by the Free Software Foundation.
8    *
9    * This code is distributed in the hope that it will be useful, but WITHOUT
10   * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11   * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
12   * version 2 for more details (a copy is included in the LICENSE file that
13   * accompanied this code).
14   *
15   * You should have received a copy of the GNU General Public License version
16   * 2 along with this work; if not, write to the Free Software Foundation,
17   * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18   *
19   * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20   * or visit www.oracle.com if you need additional information or have any
21   * questions.
22   */
23  
24  /*
25   * @test
26   * @bug 4108852
27   * @summary A few tests of stripTrailingZeros
28   * @run main StrippingZerosTest
29   * @run main/othervm -XX:+AggressiveOpts StrippingZerosTest
30   * @author Joseph D. Darcy
31   */
32  
33  import java.math.*;
34  
35  public class StrippingZerosTest {
36      public static void main(String argv[]) {
37          BigDecimal [][] testCases = {
38              {new BigDecimal("1.00000"),         new BigDecimal("1")},
39              {new BigDecimal("1.000"),           new BigDecimal("1")},
40              {new BigDecimal("1"),               new BigDecimal("1")},
41              {new BigDecimal("0.1234"),          new BigDecimal("0.1234")},
42              {new BigDecimal("0.12340"),         new BigDecimal("0.1234")},
43              {new BigDecimal("0.12340000000"),   new BigDecimal("0.1234")},
44              {new BigDecimal("1234.5678"),       new BigDecimal("1234.5678")},
45              {new BigDecimal("1234.56780"),      new BigDecimal("1234.5678")},
46              {new BigDecimal("1234.567800000"),  new BigDecimal("1234.5678")},
47              {new BigDecimal("0"),               new BigDecimal("0")},
48              {new BigDecimal("0e100"),           new BigDecimal("0e100")},
49              {new BigDecimal("0e-100"),          new BigDecimal("0e-100")},
50              {new BigDecimal("10"),              new BigDecimal("1e1")},
51              {new BigDecimal("20"),              new BigDecimal("2e1")},
52              {new BigDecimal("100"),             new BigDecimal("1e2")},
53              {new BigDecimal("1000000000"),      new BigDecimal("1e9")},
54              {new BigDecimal("100000000e1"),     new BigDecimal("1e9")},
55              {new BigDecimal("10000000e2"),      new BigDecimal("1e9")},
56              {new BigDecimal("1000000e3"),       new BigDecimal("1e9")},
57              {new BigDecimal("100000e4"),        new BigDecimal("1e9")},
58              // BD value which larger than Long.MaxValue
59              {new BigDecimal("1.0000000000000000000000000000"),    new BigDecimal("1")},
60              {new BigDecimal("-1.0000000000000000000000000000"),   new BigDecimal("-1")},
61              {new BigDecimal("1.00000000000000000000000000001"),   new BigDecimal("1.00000000000000000000000000001")},
62              {new BigDecimal("1000000000000000000000000000000e4"), new BigDecimal("1e34")},
63          };
64  
65          for(int i = 0; i < testCases.length; i++) {
66  
67              if (!(testCases[i][0]).stripTrailingZeros().equals(testCases[i][1])) {
68                  throw new RuntimeException("For input " + testCases[i][0].toString() +
69                                             " did not received expected result " +
70                                             testCases[i][1].toString() + ",  got " +
71                                             testCases[i][0].stripTrailingZeros());
72              }
73  
74              testCases[i][0] = testCases[i][0].negate();
75              testCases[i][1] = testCases[i][1].negate();
76  
77              if (!(testCases[i][0]).stripTrailingZeros().equals(testCases[i][1])) {
78                  throw new RuntimeException("For input " + testCases[i][0].toString() +
79                                             " did not received expected result " +
80                                             testCases[i][1].toString() + ",  got " +
81                                             testCases[i][0].stripTrailingZeros());
82              }
83  
84          }
85      }
86  }